/**
 * 修复管理员账号的脚本
 * 使用方法: node scripts/fix-admin.js
 */

const db = require('../config/db');
const { md5WithSalt } = require('../utils/md5Util');

async function fixAdmin() {
  try {
    console.log('🔧 开始修复管理员账号...\n');
    
    // 生成正确的密码散列
    const correctHash = md5WithSalt('123456');
    console.log('📝 密码: 123456');
    console.log('📝 密码散列:', correctHash);
    console.log('📝 盐值:', process.env.MD5_SALT || 'uni-app-salt (默认)');
    console.log('');
    
    // 检查是否存在 username='admin' 的账号
    const [existing] = await db.pool.query(
      'SELECT id, username, phone, user_type, password FROM users WHERE username = ?',
      ['admin']
    );
    
    if (existing.length > 0) {
      const user = existing[0];
      console.log('🔍 找到现有账号:');
      console.log(`   ID: ${user.id}`);
      console.log(`   用户名: ${user.username}`);
      console.log(`   手机号: ${user.phone || 'NULL'}`);
      console.log(`   用户类型: ${user.user_type}`);
      console.log(`   当前密码散列: ${user.password}`);
      console.log('');
      
      // 更新为管理员并修复密码
      await db.pool.query(
        'UPDATE users SET password = ?, user_type = ? WHERE username = ?',
        [correctHash, 'admin', 'admin']
      );
      console.log('✅ 已更新账号为管理员并修复密码');
    } else {
      // 创建新管理员（使用空字符串而不是 null，因为 phone 字段不允许为 null）
      await db.pool.query(
        'INSERT INTO users (phone, password, username, user_type) VALUES (?, ?, ?, ?)',
        ['', correctHash, 'admin', 'admin']
      );
      console.log('✅ 已创建新的管理员账号');
    }
    
    // 验证
    const [verify] = await db.pool.query(
      'SELECT id, username, user_type FROM users WHERE username = ? AND password = ? AND user_type = ?',
      ['admin', correctHash, 'admin']
    );
    
    if (verify.length > 0) {
      console.log('\n✅ 验证成功！管理员账号已就绪');
      console.log('   用户名: admin');
      console.log('   密码: 123456');
      console.log('   可以用于登录 IT 管理端');
    } else {
      console.log('\n❌ 验证失败，请检查数据库连接和表结构');
    }
    
    await db.pool.end();
    process.exit(0);
  } catch (error) {
    console.error('❌ 错误:', error.message);
    console.error(error);
    process.exit(1);
  }
}

// 执行
fixAdmin();

